"""author: wenyao
   data: 2021/5/18
   project: devopscmdb
"""
#
# 日志：日志是一种可以追踪某些软件运行时所发生事件的方法。
# 通过日志可以做什么事情？
# 1、程序调试
#    了解程序的运行情况，是否正常
# 2、排错
#     分析和定位故障
# 3、用户行为分析

# python  logging 模块处理日志
# 五个日志级别：
# 日志等级         数值表示    描述
# DEBUG              10       最详细的日志信息，用于诊断问题
# INFO               20       详细日志信息仅次于DEBUG,记录关键节点的信息
# WARNING            30(默认)  当前不期望发生的事情
# ERROR              40        发生错误问题导致某些功能不能正常使用
# CRITICAL           50        发生严重错误导致程序不能继续运行

import logging
import logging.handlers
from logging.handlers import TimedRotatingFileHandler
# LOG_FORMAT = "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s"
# logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT, filename="test.log")
# logging.debug("this is debug...")
# logging.warning("this is warning....")
# logging.error("this is error...")

# LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)-9s - %(filename)-8s : %(lineno)s line - %(message)s"
# logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT, filename="test.log")

# def login_required(func):
#     print("a")
#     def inner(a,b):
#         if username == "root":
#             print("欢迎")
#             func(a,b)
#             logging.debug(f"this is {func.__name__}")
#         else:
#             print("权限不足")
#     return inner


# @login_required  #add = login_required(add)
# def add(a,b):
#     print(f"{a+b}")
#
# @login_required  #add = login_required(add)
# def add2(a,b):
#     print(f"{a+b}")
#
#
# a=int(input("输入一个整数"))
# b=int(input("输入一个整数"))
# username = input("输入")
# add(a,b)
# add2(4,7)

#logging日志系统的四大组件
#日志器  Logger
#处理器  Handler
#过滤器  Filter
#格式器  Formatter

import logging
from logging.handlers import TimedRotatingFileHandler, RotatingFileHandler
#获取logger对象，用于记录日志
def  set_log(filename):
    logger = logging.getLogger()

    #创建一个handler对象， 用于写入日志，输出到文件
    #fh = logging.FileHandler(filename)
    #fh = TimedRotatingFileHandler(filename, when="D", interval = 2, backupCount=3)
    fh = RotatingFileHandler(filename, maxBytes=500, backupCount=2)
    #创建一个handler对象，用于输出到屏幕
    ch = logging.StreamHandler()

    #创建formatter， 用于处理日志格式
    formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")

    #绑定formatter 到handler上
    fh.setFormatter(formatter)

    #绑定handler到logger对象上
    logger.addHandler(fh)
    logger.addHandler(ch)

    #设置日志等级
    logger.setLevel(logging.DEBUG)

import time
set_log("test.log")
logger = logging.getLogger(__name__)
for i in range(10):
    time.sleep(0.5)
    logger.warning("this is rotate time ....")

# logger.debug("logger debug message")
# logger.info("logger info message")
# logger.warning("logger warning message")
# logger.error("logger error message")

#root logger 类似/
#传递name进去类似 /sc
#子日志器会继承父日志器的配置
# logger2 = logging.getLogger("sc")
# logger2.warning("this is logger2!")